/**
 * 查询任务列表入参
 */
export interface GetTaskInfoParam {
  taskName?: string;
  taskStatus?: TaskStatus | '';
  flowType?: number | '';
  beginTime: string;
  endTime: string;
  pageNo?: number;
  pageSize?: number;
}

/**
 * 查询任务列表返回信息
 */
// export interface TaskInfo {
//   /**任务id */
//   taskId: number;
//   /**任务类型-对应流程类型 0-机器人任务；1-通知流程任务；2-人机协同任务 */
//   flowType: number;
//   /**任务名称 */
//   taskName: string;
//   /**任务描述 */
//   taskDescribe: string;
//   /** 当前轮次 */
//   currentRound: number;
//   /** 当前状态 */
//   taskStatus: TaskStatus;
//   /** 创建者 */
//   userName: string;
//   /** 总任务数 */
//   totalTaskNum: number;
//   /** 已完成任务数 */
//   finishedTaskNum: number;
//   /** 创建时间 */
//   createTime: string;
// }

/**
 * 查询任务列表-列表全字段
 */
export type TaskInfo = {
  /**
   * 任务ID
   */
  taskId: number;
  /**
   * 任务名称
   */
  taskName: string;
  /**
   * 任务类型 0:机器人流程，1：通知流程,，2:人机协同
   */
  flowType: number;
  /**
   * 任务状态（1-未执行，2-执行中，3-已完成，4-已过期，5-禁呼中，6-已取消 7-暂停中）
   */
  taskStatus: number;
  /**
   * 允许重呼 true：允许；false: 禁止
   */
  allowRepeatCall: boolean;
  /**
   * 任务总数
   */
  totalTaskNum: number;
  /**
   * 任务进度(已完成任务数)
   */
  finishedTaskNum: number;
  /**
   * 接通数
   */
  connectNumber: number;
  /**
   * 接通率(%)
   */
  connectRate: number;
  /**
   * 呼损率(%)
   */
  callLossRate: number;
  /**
   * 转人工数
   */
  transferManualNumber: number;
  /**
   * 转人工率(%)
   */
  transferManualRate: number;
  /**
   * 转人工接起量
   */
  transferManualConnectNumber: number;
  /**
   * 转人工接起率(%)
   */
  transferManualConnectRate: number;
  /**
   * 转人工呼损量
   */
  transferManualCallLossNumber: number;
  /**
   * 转人工呼损率(%)
   */
  transferManualCallLossRate: number;
  /**
   * 总通话时长
   */
  totalTalkTime: number;
  /**
   * 平均通话时长
   */
  aveTalkTime: number;
  /**
   * 通话60s以上的话务量
   */
  connectNumberOver60: number;
  /**
   * 总排队量 （坐席正在通话中，如果有转人工请求，排队量加1）
   */
  totalQueuesNumber: number;
  /**
   * 同时最大排队量
   */
  maxQueuesNumber: number;
  /**
   * 平均排队时长 (总排队时间/总排队量)
   */
  aveQueuesTime: number;
  /**
   * 重呼数 （被重呼过的号码数，一个号码多次重呼，只记作一次）
   */
  repeatCallNumber: number;
  /**
   * 重呼次数(点按钮 重呼 次数)
   */
  repeatCallTimes: number;
  /**
   * 创建时间
   */
  createTime: string;
  /**启动方式 0: 自动启动; 1: 手动启动*/
  startMode: number;
};

export interface ExecTimeInfo {
  type: 'daily' | 'weekly' | 'monthly';
  weeks?: number[];
  months?: number[];
}

/**
 * 新建任务所需的信息
 */
export interface HandleTaskInfo {
  /** 任务名称 */
  taskName: string;
  /** 任务描述 */
  taskDesc?: string;
  /** 任务类型 */
  flowType: number;
  /**
   * 流程id，flowType=0-robotId为机器人id，flowType=1-通知流程Id
   */
  workFlowId: number;
  /** 机器人ID */
  robotId: string;
  /** 通知流程ID */
  notifyFlowId: string;
  /** 机器人数量，也叫最大呼叫并发 */
  maxCall?: number;
  /** 执行坐席组ID */
  seatsGroupId?: string;
  /**最大弹屏数 */
  maxSeatsSession?: number;
  /** 语音识别厂商ID */
  mrcpId?: string;
  /**
   * 外呼语音类型 0：TTS 1：录音
   */
  soundType: number;
  /** tts厂商ID */
  ttsId?: string;
  /**
   * 录音模板ID(soundType = 1 必传)
   */
  soundRecordTemplateId?: number;
  /** 号码组ID */
  calledGroupId?: string;
  /** 主叫号码 */
  callerId?: string;
  /** 启动日期 */
  dateBegin: string;
  /** 执行时间段[{"start":"15:30","end":"15:40"}] */
  allowTimes: string;
  /** 策略项开关0：开 ，1：关 */
  strategyFlag: number;
  /** 呼叫结果策略项strategyFlag=0,必填 */
  callResultStrategy?: string;
  /** 呼叫时间间隔strategyFlag=0,必填 */
  callTimeInterval?: number;
  /** 重呼次数strategyFlag=0,必填 */
  totalRound?: number;
  /** 其他策略项策略项 */
  strategyValue?: string;
  /**启动方式 0: 自动启动; 1: 手动启动*/
  startMode: number;
  /** 外呼模式; 0:预览式外呼; 1:预测式外呼*/
  callMode?: number;
  /**过期日期	 */
  expireDate: string;
  /**执行时间-周期类型和值 */
  execTime: ExecTimeInfo;
  /**跳过节假日 on/off  */
  skipHolidays: 'on' | 'off';
}

/**
 * 任务重呼-入参
 */
export interface RepeatTaskParam {
  /** 呼叫时间间隔strategyFlag=0,必填 */
  callTimeInterval?: number;
  /** 重呼次数strategyFlag=0,必填 */
  totalRound?: number;
  /** 其他策略项策略项 */
  strategyValue?: string;
}

/**
 * 任务详情-头部显示字段
 */
export interface TaskDetailInfo {
  /** 任务名称 */
  taskName: string;
  /** 任务id */
  taskId: number;
  /** 任务描述 */
  taskDesc: string;
  /** 任务状态（0-未执行，1-执行中，2-已完成，3-禁呼中，4-已过期，5-已取消） */
  taskStatus: number;
  /** 流程类型（0:机器人流程，1：通知流程，2:人机协同，3:人工自动外呼任务） */
  flowType: number;
  /** 流程名称 */
  flowName: string;
  /** 最大呼叫并发 */
  maxCall: number;
  /** 执行坐席组名称 */
  seatsGroupName?: string;
  /**最大弹屏数 */
  maxSeatsSession?: number;
  /** 创建人名称 */
  userName: string;
  /** 任务呼叫起始日期 */
  dateBegin: string;
  /** 允许呼叫时间段 */
  allowTimes: string;
  /** TTS厂商名称 */
  ttsName?: string;
  /** 语音识别厂商名称 */
  mrcpName?: string;
  /** 录音模板名称 */
  soundRecordTemplateName?: string;
  /** 呼前短信模板名称	 */
  beforeCallSmsTempName?: string;
  /**
   * 呼通挂机短信模板name
   */
  sysAnswerByeTempName?: string;
  /**
   * 未呼通呼通挂机短信模板name
   */
  sysNoanswerByeTempName?: string;
  /** 任务总量 */
  totalNum: number;
  /** 已完成数量 */
  finishedNum: number;
  /** 黑名单开关 */
  blackSwitch: number;
  /** 预计完成时间 */
  restTime: number;
  /**重呼次数(点按钮 重呼 次数) */
  repeatCallTimes: number;
  /**号码组 */
  callGroupName: string;
  /** 外呼模式; 0:预览式外呼; 1:预测式外呼*/
  callMode?: number;
  /**过期日期	 */
  expireDate: string;
  /**执行时间-周期类型和值 */
  execTime: ExecTimeInfo;
  /**跳过节假日 on/off  */
  skipHolidays: 'on' | 'off';
}

/**
 * 任务进度信息
 */
export interface TaskProcessInfo {
  /** 总数 */
  totalCount: number;
  /** 已呼数 */
  calledCount: number;
  /** 未呼数 */
  notCalledCount: number;
}

/**
 * 任务状态
 */
export enum TaskStatus {
  /**全部 */
  ALL = 0,
  /** 未执行 */
  NOT_HANDLE = 1,
  /** 执行中 */
  IN_HANDLE = 2,
  /** 已完成 */
  HAD_DONE = 3,
  /** 已过期 */
  OUT_TIME = 4,
  /** 禁呼中 */
  NO_CALL = 5,
  /** 已取消 */
  HAD_CANCEL = 6,
  /** 暂停中 */
  HAD_STOP = 7,
}
/**
 * 外呼任务创建-执行时间-周期-周对应值
 */
export enum WeekDay {
  '周一' = 1,
  '周二' = 2,
  '周三',
  '周四',
  '周五',
  '周六',
  '周日',
}
/**
 * 任务详情-外呼结果
 */
export interface TaskCallResultInfo {
  /**呼叫状态 */
  callStatus: string;
  /**呼叫个数 */
  callValue: string;
}

/**
 * 查询通话记录的参数
 */
export interface GetCallRecordParams {
  pageSize: number;
  pageNo: number;
  calledNumber?: string;
  calledName?: string;
  repeatCallTimes?: number;
  callStatus?: number[];
  beginTime: string;
  endTime: string;
}

/**
 * 任务详情-通话记录-列表全字段
 */
export interface TaskCallRecordInfo {
  /** 通话记录ID */
  callRecordId: string;
  /** 主叫号码 */
  // callerNumber: string; //3期缺？
  /** 被叫号码 */
  calledNumber: string;
  /** 被叫姓名 */
  calledName: string;
  /** 被叫备注 */
  // calledRemarks?: string; //3期缺？
  /** 用户意向 */
  userIntention: string;
  /** 呼叫结果,  1、成功；2、关机；3、空号；4、停机；5、正在通话中；6、用户拒接；7、无法接通；8、暂停服务；9、用户正忙；10、拨号方式不正确；11、呼入限制；12、来电提醒（各类秘书服务）；13、呼叫转移失败；14、网络忙；15、无人接听；16、欠费；17、无法接听；18、改号；19、线路故障（线路不能呼出，比如SIM卡欠费）；20、稍后再拨（各种稍后再拨提示） */
  callStatus: number;
  /** 是否转人工 0：否，1：是 */
  // isTransferManual: 0 | 1; //3期缺？
  /**项目名称*/
  projectName: string;
  /**省*/
  province: string;
  /**市*/
  cityName: string;
  /**客户性别:男，女*/
  calledSex: string;
  /**客户类型*/
  calledType: string;
  /**通话类型  1.人机协同 2.人工介入（只要坐席介入了都算），3 机器人（普通机器人 和 通知机器人）*/
  callType: number;
  /**人工介入时间*/
  transferManualBeginTime: string;
  /**人工介入时长*/
  transferManualInterval: number;
  /**交互方式 TTS&录音 0-TTS放音 1-文件放音 (TTS&录音)*/
  soundType: number;
  /**沟通路径*/
  communicationPath: string;
  /**坐席组名称*/
  seatsGroupName: string;
  /**坐席姓名*/
  seatsName: string;
  /**坐席工号*/
  seatsNumber: string;
  /**起呼时间*/
  callBeginTime: string;
  /**接通时间*/
  callConnectedTime: string;
  /**挂机时间*/
  callEndTime: string;
  /**通话时长*/
  callTalkTime: number;
  /**挂机方 挂断方 1-用户, 2-座席, 3-平台，4-机器人*/
  hangupDirect: number;
  /**租户ID 租户ID对应企业ID*/
  ompanyId: number;
  /**任务名称*/
  taskName: string;
  /**场景名称 机器人名称*/
  robotName: string;
  /**任务类型 0:机器人流程，1：通知流程，2:人机协同，3.人人外呼 */
  flowType: number;
  /**按键信息 所有的按键 及 按键收集 的信息*/
  keyInfo: string;
  /**机器人通话时长 总通话时长 - 人工介入时长*/
  robotCallTalkTime: number;
  /**机器人对话轮次 机器人与用户的对话次数*/
  robotCallTalkRound: number;
}

/**
 * 定制列-列信息-系统通用-后端接口返回
 */
export interface ColInfoResponse {
  /**
   * 列名:英文字段名称
   */
  columnName: string;
  /**
   * 列的中文描述， 如：项目名称、省、市 等
   */
  desc: string;
  /**
   * 列头是否显示，开:on ,关:off
   */
  switch: string;
}

/**
 * 定制列-列信息-系统通用
 */
export interface HandleColInfo {
  // 英文名
  key: string;
  // 中文名
  title: string;
  switch: string;
}

/**
 * 会话历史记录
 */
export interface TaskDialogueInfo {
  /**序号*/
  index: number;
  /** 话者角色 0：机器人 ，1：用户， 2：人工坐席 */
  role: number;
  /**未理解状态：0：未理解，1：正常*/
  status: number;
  /** 文本 */
  text: string;
  /** 时间 */
  time: string;
  /** 语音地址（role为  “1：用户， 2：人工坐席” 时有值） */
  url: string;
}

/**通话记录详情 */
export interface TaskCallRecordInfoDetail {
  /** 通话记录ID */
  callRecordId: string;
  /** 任务名称 */
  taskName: string;
  /** 主叫号码 */
  callerNumber: string;
  /** 被叫号码 */
  calledNumber: string;
  /** 被叫姓名 */
  calledName: string;
  /** 被叫备注 */
  calledRemark: string;
  /** 用户意向 */
  userIntention: string;
  /** 执行次数 */
  callRound: number;
  /** 呼叫开始时间 */
  callBeginTime: string;
  /** 呼叫结束时间 */
  callEndTime: string;
  /** 通话时长(s) */
  callTalkTime: number;
  /** 呼叫状态,  1、成功；2、关机；3、空号；4、停机；5、正在通话中；6、用户拒接；7、无法接通；8、暂停服务；9、用户正忙；10、拨号方式不正确；11、呼入限制；12、来电提醒（各类秘书服务）；13、呼叫转移失败；14、网络忙；15、无人接听；16、欠费；17、无法接听；18、改号；19、线路故障（线路不能呼出，比如SIM卡欠费）；20、稍后再拨（各种稍后再拨提示） */
  callStatus: number;
  /** 机器人标识 */
  nluId: string;
  /**  */
  soundRecord: {
    /** 录音地址 */
    url: string;
    /** 录音时长(s) */
    time: number;
    /** 回话记录 */
    recordList: {
      /** 话者角色 0：用户 ，1：机器人， 2：人工坐席 */
      role: number;
      /**
       * 0：未理解，1：正常
       */
      status: number;
      /** 文本 */
      text: string;
      /** 时间 */
      time: string;
      /** 录音地址 */
      url: string;
    }[];
    /** 如果没有转人工，该值为空对象 "{}" */
    transferManual: {
      /** 转人工时间 */
      time: string;
      /** 客服名称 */
      customerServiceName: string;
    };
  };
}

/**通话记录-通话小结信息 */
export interface CallSummaryDetail {
  /**成访结果 true:成功；false:失败 */
  visitResult: boolean;
  /**销售结果 true:成功；false:失败 */
  marketingResult: boolean;
  /**备注 */
  remarks: string;
}
/**
 * 人工监听-呼叫列表
 */
export interface ManListenCall {
  /** 任务id */
  taskId: number;
  /** 完成呼叫总数 */
  countComplete: number;
  /** 正在呼叫总数 */
  countProcess: number;
  /** 列表内容 */
  sessions: ManListenCallSession[];
}

export interface ManListenCallSession {
  active?: boolean;
  /** 对话Id */
  callRecordId: string;
  /** 会话串行号码 */
  callSerialNumber: string;
  /** 呼叫中心对话id */
  callId: string;
  /** 被叫号码 */
  number: string;
  /** 号码状态，0-未呼，1-呼叫中，2-等待坐席，3-通话中 */
  state: 0 | 1 | 2 | 3;
  /** 呼叫开始时间 */
  inviteTime: string;
  /** 用户振铃时间 */
  ringTime: string;
  /** 用户应答时间 */
  answerTime: string;
  /** 处理会话状态为（1-呼叫中、3-通话中）的记录，去数据库中查询该任务下的手机号对应的信息（被叫姓名，被叫备注） */
  calledName: string;
  /** 处理会话状态为（1-呼叫中、3-通话中）的记录，去数据库中查询该任务下的手机号对应的信息（被叫姓名，被叫备注） */
  calledRemarks: string;
}
/**
 * 任务详情-通话分析-转化率分析
 */
export interface CallAnalysisConversionInfo {
  /** 总数 */
  total: number;
  /** 无意愿 数 */
  degree0: number;
  /** 一般意愿 数 */
  degree1: number;
  /** 强烈意愿 数 */
  degree2: number;
}
/**
 * 任务详情-通话分析-时长分析
 */
export interface CallAnalysisDurationInfo {
  /** 通话时长 */
  talkTimeList: number[];
  /** 通话总个数 */
  count: number;
}

/**
 * 任务详情-重呼策略
 */
export interface CallStrategyDetail {
  /** 呼叫间隔 -分钟*/
  callInterval: number;
  /** 呼叫次数 */
  callTimes: number;
  /** 策略项列表 */
  strategies: {
    /** 策略ID */
    strategyId: number;
    /** 策略名称 */
    strategyName: string;
    /** 策略值 */
    strategies: {
      /** 策略值描述（如：关机、通话中、未接通、网络忙） */
      key: string;
      /** 策略值 */
      value: string;
    }[];
  }[];
}
